home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Magazine / Online / QMail / source / sgetopt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-15  |  1.2 KB  |  55 lines

  1. /* sgetopt.c, sgetopt.h: (yet another) improved getopt clone, outer layer
  2. D. J. Bernstein, djb@pobox.com.
  3. Depends on subgetopt.h, substdio.h, subfd.h.
  4. No system requirements.
  5. 19970208: Cleanups.
  6. 931201: Baseline.
  7. No known patent problems.
  8.  
  9. Documentation in sgetopt.3.
  10. */
  11.  
  12. #include "substdio.h"
  13. #include "subfd.h"
  14. #define SGETOPTNOSHORT
  15. #include "sgetopt.h"
  16. #define SUBGETOPTNOSHORT
  17. #include "subgetopt.h"
  18.  
  19. #define getopt sgetoptmine
  20. #define optind subgetoptind
  21. #define opterr sgetopterr
  22. #define optproblem subgetoptproblem
  23. #define optprogname sgetoptprogname
  24.  
  25. int opterr = 1;
  26. char *optprogname = 0;
  27.  
  28. int getopt(argc,argv,opts)
  29. int argc;
  30. char **argv;
  31. char *opts;
  32. {
  33.   int c;
  34.   char *s;
  35.  
  36.   if (!optprogname) {
  37.     optprogname = *argv;
  38.     if (!optprogname) optprogname = "";
  39.     for (s = optprogname;*s;++s) if (*s == '/') optprogname = s + 1;
  40.   }
  41.   c = subgetopt(argc,argv,opts);
  42.   if (opterr)
  43.     if (c == '?') {
  44.       char chp[2]; chp[0] = optproblem; chp[1] = '\n';
  45.       substdio_puts(subfderr,optprogname);
  46.       if (argv[optind] && (optind < argc))
  47.         substdio_puts(subfderr,": illegal option -- ");
  48.       else
  49.         substdio_puts(subfderr,": option requires an argument -- ");
  50.       substdio_put(subfderr,chp,2);
  51.       substdio_flush(subfderr);
  52.     }
  53.   return c;
  54. }
  55.